/**
 * Copyright(c) 2014 Xunton Solutions
 *
 * History:
 *   15-1-27 下午1:35 Created by dwzhang
 */
package com.jade.modules.cms;

import java.util.Map;

import com.jade.framework.base.criterion.Criteria;
import com.jade.framework.base.util.PagingList;

/**
 * 与用户相关的内容操作接口。
 *
 * @author <a href="mailto:dwzhang@xunton.com">dwzhang</a> 
 * @version 1.0 15-1-27 下午1:35
 */
public interface UserContentManager
{
    /**
     * 添加内容浏览记录。
     */
    public void addBrowserRecord(ContentBrowserRecord browserRecord)
            throws CmsException;

    /**
     * 获取内容浏览数量。
     *
     * @param contentIds 内容标识。
     * @return 浏览数量。
     */
    public Map<Long, Long> getBrowserCount(long... contentIds);

    public long getBrowserCount(long contentId);

    /**
     * 创建评论。
     *
     * @param comment 评论包信息。
     * @throws CmsException 处理异常。
     */
    public void addComment(Comment comment)
            throws CmsException;

    /**
     * 过滤评论。
     *
     * @param ids 评论标识。
     * @throws CmsException 处理异常。
     */
    public void filterComment(long... ids)
            throws CmsException;

    /**
     * 删除评论。
     *
     * @param ids 评论标识
     * @throws CmsException 处理异常。
     */
    public void removeComment(long... ids)
            throws CmsException;

    /**
     *  获取评论详细信息。
     *
     * @param id 评论标识
     * @return 评论信息对象
     */
    public Comment getComment(long id);

    /**
     * 获取内容评论数量。
     *
     * @param contentIds 内容标识。
     * @return 评论数量。
     */
    public Map<Long, Long> getCommentCounts(long... contentIds);

    public long getCommentCount(long contentId);

    /**
     * 分页获取内容评论列表。
     *
     * @param contentId 内容标识
     * @return 评论列表
     */
    public PagingList<Comment> queryComment(long contentId, int offset, int length);

    /**
     * 根据条件分页评论。
     *
     * @param criteria 查询条件
     * @return 评论列表。
     */
    public PagingList<Comment> queryComment(Criteria criteria);

    /**
     * 创建收藏。
     *
     * @param favorite 收藏信息。
     * @throws CmsException 处理异常。
     */
    public void addFavorite(Favorite favorite)
            throws CmsException;

    /**
     * 删除收藏。
     *
     * @param ids 收藏标识
     * @throws CmsException 处理异常。
     */
    public void removeFavorite(long... ids)
            throws CmsException;

    public void removeFavorite(String userType, String userId, String etype, long eid)
            throws CmsException;

    public void removeFavorite(String userType, String userId)
            throws CmsException;

    /**
     *  获取收藏详细信息。
     *
     * @param id 收藏标识
     * @return 收藏信息对象
     */
    public Favorite getFavorite(long id);

    /**
     *  判断用户是否收藏了指定内容。
     *
     * @param userType  用户类型
     * @param userId  用户标识
     * @param etype 收藏实体类型
     * @param eid  收藏实体标识
     * @return 收藏信息对象
     */
    public boolean isFavorite(String userType, String userId, String etype, long eid);

    /**
     * 获取内容收藏数量。
     *
     * @param etype 收藏实体类型
     * @param eid  收藏实体标识
     * @return 收藏数量。
     */
    public long getFavoriteCount(String etype, long eid);

    /**
     * 分页获取内容收藏列表。
     *
     * @param userType 用户类型
     * @param userId 用户标识
     * @param offset 偏移量
     * @param length 获取长度
     * @return 收藏列表
     */
    public PagingList<Favorite> queryFavorite(String userType, String userId, int offset, int length);

    /**
     * 根据条件分页收藏。
     *
     * @param criteria 查询条件
     * @return 收藏列表。
     */
    public PagingList<Favorite> queryFavorite(Criteria criteria);
}
